/**
 * 应用树，主要用于显示树结构的应用、模块、功能数据，带右键菜单功能
 * json格式：[{"id":"AcApp#10","leaf":false,...},{...},...]
 * java类：com.augurit.common.system.common.MenuTreeNode 
 * @class Ext.ux.CheckTree
 * @extends Ext.tree.TreePanel
 */
 
 Ext.namespace("Ext.ux");
 
 Ext.ux.CheckTree = Ext.extend(Ext.tree.TreePanel,{
 
 	// 获取数据的URL
	url: '',
	
	// 是否使用箭头图标
	useArrows: false,
	
	// 是否显示动画
	animate: true,
	
	// 是否允许拖放
	enableDD: false,
	
	// 是否显示边框
	border: false,
	
	// 是否显示根节点
	rootVisible: false,
	
	// 是否自动显示滚动条
	autoScroll: true,
	containerScroll: true,
	frame: false,
	
	// 设置间隔样式
	bodyStyle: 'padding:5px',
	
	//是否展开
	expand: false,

	initComponent: function(){
	   
		// 根节点
	    this.root = new Ext.tree.AsyncTreeNode({
			id: "-1",	// 根节点的默认ID为“-1”
			text: '菜单树',
			draggable: false,	// 不允许拖放
			leaf: false,	// 非叶子节点
			iconCls: 'icon-tree-root'
		});
			
		// 数据加载器
		this.loader = new Ext.tree.TreeLoader({
			dataUrl: this.url,
	    	//baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI }, //添加 uiProvider 属性
			listeners: {
				"beforeload": function(treeLoader, node){
					treeLoader.baseParams.id = node.id;
				}
			}
		});
		
		//当用户单击checkbox时使它的孩子树发生相同的变化
		var changeChildTree = function(node,checked){
			node.eachChild(
				function(child){
					child.ui.toggleCheck(checked);      
					child.attributes.checked = checked;
					changeChildTree(child,checked);
				}
			);
		};
		
		//当用户单击checkbox时使它的父亲树发生变化
		var changeParentTree = function(node,checked){
			var parent = node.parentNode;
			if(parent){
				if(checked){
					if(parent.hasChildNodes()){
						for(brother = parent.firstChild; brother != parent.lastChild;){
								if(!brother.attributes.checked){
									return;
								}
								brother = brother.nextSibling;
						}
						if(parent.lastChild.attributes.checked){
							parent.ui.toggleCheck(checked);      
							parent.attributes.checked = checked;
							changeParentTree(parent,checked);
						}
						
					}
				}
				else{
					parent.ui.toggleCheck(checked);      
					parent.attributes.checked = checked;
					changeParentTree(parent,checked);
				}
					
			}
				
			};
			
		//用户单击check树
		this.on('checkchange', checkchange, this);
		function checkchange(node, checked){
				//向上遍历它的父亲树
				if(node.parentNode){
					changeParentTree(node,checked);
				}
				//向下遍历它的所有孩子树
				if(node.hasChildNodes()){
					changeChildTree(node, checked);
				}
		};

		// 调用父类初始化
		Ext.ux.CheckTree.superclass.initComponent.call(this);
		

		// 展开根节点
		if(this.expand)this.getRootNode().expand(true);
	},
	
	getSelectedNode: function(){
		return this.getSelectionModel().getSelectedNode();
	},
	
	// 改变树的URL
	changeUrl: function(url){
		this.loader.dataUrl = url;
	}
});